﻿using System;
using CRC.Clases;
using CRC.Incidencias.Dominio.Clases;
using NHibernate;
using System.Collections.Generic;
using CRC.GestionSalones.Dominio.Clases;

namespace CRC.Incidencias.Dominio.Controladores
{
    class ControladorAbrirIncidencia : ControladorBaseIncidencia
    {

        public int abrirIncidencia(
            int pIntIncidentado, 
            String pStrConcepto, 
            int pLoSoluciona, 
            DateTime? pFechaLimite, 
            String pStrObservaciones
        )
        {
            ISession session = null;
            ITransaction tx = null;
            try
            {
                session = CRC.NHibernate.NHibernateHelper.GetCurrentSession();
                tx = session.BeginTransaction();

                Concepto conc = (Concepto)session.Get(typeof(Concepto), pStrConcepto);
                AsignacionIncidencia aAtenderPor = null;
                if (pLoSoluciona != -1) {
                    aAtenderPor=(AsignacionIncidencia)session.Get(typeof(AsignacionIncidencia), pLoSoluciona);
                }
               
                Salon incidentado = (Salon)session.Get(typeof(Salon), pIntIncidentado);
                
                Incidencia nuevaIncidencia = new Incidencia(incidentado, conc, aAtenderPor, pFechaLimite, pStrObservaciones);
                
                session.Save(nuevaIncidencia);
                tx.Commit();
                
                return nuevaIncidencia.Id;
            }
            catch (HibernateException he) {
                if (tx != null) tx.Rollback();
                session.Close();
                throw he;
            }
        }
    }
}
